home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / pascal / pibasy47.zip / PIBASYNC.GLO < prev    next >
Text File  |  1988-05-18  |  10KB  |  194 lines

  1. (*----------------------------------------------------------------------*)
  2. (*                                                                      *)
  3. (*                  COMMUNICATIONS HARDWARE ADDRESSES                   *)
  4. (*                                                                      *)
  5. (*        These are specific to IBM PCs and close compatibles.          *)
  6. (*                                                                      *)
  7. (*----------------------------------------------------------------------*)
  8.  
  9. CONST
  10.  
  11.    UART_THR   = $00;     (* offset from base of UART Registers for IBM PC *)
  12.    UART_RBR   = $00;
  13.    UART_IER   = $01;
  14.    UART_IIR   = $02;
  15.    UART_LCR   = $03;
  16.    UART_MCR   = $04;
  17.    UART_LSR   = $05;
  18.    UART_MSR   = $06;
  19.  
  20.    I8259_1    = $20      (* address of first 8259  *);
  21.    I8259_2    = $A0      (* address of second 8259 *);
  22.  
  23.    I8088_IMR1 = $21;     (* port address of the 1st Interrupt Mask Register *)
  24.    I8088_IMR2 = $A1;     (* port address of the 2nd Interrupt Mask Register *)
  25.  
  26.    COM1_Base  = $03F8;   (* port addresses for the UART *)
  27.    COM2_Base  = $02F8;
  28.    COM3_Base  = $03E8;
  29.    COM4_Base  = $02E8;
  30.  
  31.    COM1_Irq   = 4;       (* Interrupt line for the UART *)
  32.    COM2_Irq   = 3;
  33.    COM3_Irq   = 4;
  34.    COM4_Irq   = 3;
  35.  
  36.    COM1_Int   = $0C;     (* Interrupt number for the UART *)
  37.    COM2_Int   = $0B;
  38.    COM3_Int   = $0C;
  39.    COM4_Int   = $0B;
  40.  
  41.    RS232_Base = $0400    (* Address of RS 232 com port pointer *);
  42.  
  43.    MaxComPorts = 4       (* Four ports allowed by this code    *);
  44.  
  45. (* STRUCTURED *) CONST
  46.                                    (* Port addresses of each com port *)
  47.  
  48.    Default_Com_Base : ARRAY[1..MaxComPorts] OF WORD =
  49.                       ( COM1_Base, COM2_Base, COM3_Base, COM4_Base );
  50.  
  51.                                    (* IRQ line for each port *)
  52.  
  53.    Default_Com_Irq  : ARRAY[1..MaxComPorts] OF INTEGER =
  54.                       ( COM1_Irq, COM2_Irq, COM3_Irq, COM4_Irq );
  55.  
  56.                                    (* Interrupt for each port *)
  57.  
  58.    Default_Com_Int  : ARRAY[1..MaxComPorts] OF INTEGER =
  59.                       ( COM1_Int, COM2_Int, COM3_Int, COM4_Int );
  60.  
  61. (*----------------------------------------------------------------------*)
  62. (*                                                                      *)
  63. (*                   COMMUNICATIONS BUFFER VARIABLES                    *)
  64. (*                                                                      *)
  65. (*     The communications buffers are implemented as circular (ring)    *)
  66. (*     buffers, or double-ended queues.  The asynchronous I/O routines  *)
  67. (*     enter characters in the receive buffer as they arrive at the     *)
  68. (*     serial port.  Higher-level routines may extract characters from  *)
  69. (*     the receive buffer at leisure.  Higher-level routines insert     *)
  70. (*     characters into the send buffer.  The asynchronous I/O routines  *)
  71. (*     then send characters out the serial port when possible.          *)
  72. (*                                                                      *)
  73. (*----------------------------------------------------------------------*)
  74.  
  75. CONST
  76.  
  77.    TimeOut             = 256        (* TimeOut value                   *);
  78.    Async_XON           = ^Q         (* XON character                   *);
  79.    Async_XOFF          = ^S         (* XOFF character                  *);
  80.  
  81.    Async_Overrun_Error = 2          (*   overrun                       *);
  82.    Async_Parity_Error  = 4          (*   parity error                  *);
  83.    Async_Framing_Error = 8          (*   framing error                 *);
  84.    Async_Break_Found   = 16         (*   break interrupt               *);
  85.  
  86.    Async_CTS           = $10        (*   Clear to send                 *);
  87.    Async_RTS           = $20        (*   Request to send               *);
  88.  
  89.    Async_DSR           = $20        (*   Data set ready                *);
  90.    Async_DTR           = $10        (*   Data terminal ready           *);
  91.  
  92.    Async_RTSDTR        = $30        (*   RTS + DTR                     *);
  93.  
  94.    Async_THRE          = $20        (*   Transmit holder reg. empty    *);
  95.  
  96. TYPE
  97.                                     (* I/O buffer type for serial port *)
  98.  
  99.    Async_Buffer_Type   = ARRAY[0..1] OF CHAR;
  100.    Async_Ptr           = ^Async_Buffer_Type;
  101.  
  102.  
  103. VAR                                 (* Port addresses for serial ports *)
  104.  
  105.    Com_Base               : ARRAY[1..MaxComPorts] OF WORD;
  106.  
  107.                                     (* IRQ line for each serial port   *)
  108.  
  109.    Com_Irq                : ARRAY[1..MaxComPorts] OF INTEGER;
  110.  
  111.                                     (* Interrupt for each serial port   *)
  112.  
  113.    Com_Int                : ARRAY[1..MaxComPorts] OF INTEGER;
  114.  
  115. VAR
  116.    Async_Buffer_Ptr       : Async_Ptr  (* Input buffer address  *);
  117.    Async_OBuffer_Ptr      : Async_Ptr  (* Output buffer address *);
  118.  
  119.    Async_Open_Flag        : BOOLEAN    (* true if port opened               *);
  120.    Async_Port             : INTEGER    (* current open port number (1 -- 4) *);
  121.    Async_Base             : INTEGER    (* base for current open port        *);
  122.    Async_Irq              : INTEGER    (* IRQ for current open port         *);
  123.    Async_Int              : INTEGER    (* Interrupt # for current port      *);
  124.    Async_RS232            : INTEGER    (* RS232 address for current port    *);
  125.  
  126.    Async_Buffer_Overflow  : BOOLEAN    (* True if buffer overflow has happened *);
  127.    Async_Buffer_Used      : INTEGER    (* Amount of input buffer used so far   *);
  128.    Async_MaxBufferUsed    : INTEGER    (* Maximum amount of input buffer used  *);
  129.  
  130.                                        (* Async_Buffer empty if Head = Tail    *)
  131.    Async_Buffer_Head      : INTEGER    (* Loc in Async_Buffer to put next char *);
  132.    Async_Buffer_Tail      : INTEGER    (* Loc in Async_Buffer to get next char *);
  133.    Async_Buffer_NewTail   : INTEGER    (* For updating tail value              *);
  134.  
  135.    Async_OBuffer_Overflow : BOOLEAN    (* True if buffer overflow has happened *);
  136.    Async_OBuffer_Used     : INTEGER    (* Amount of output buffer used         *);
  137.    Async_MaxOBufferUsed   : INTEGER    (* Max amount of output buffer used     *);
  138.  
  139.                                        (* Async_Buffer empty if Head = Tail    *)
  140.    Async_OBuffer_Head     : INTEGER    (* Loc in Async_Buffer to put next char *);
  141.    Async_OBuffer_Tail     : INTEGER    (* Loc in Async_Buffer to get next char *);
  142.    Async_OBuffer_NewTail  : INTEGER    (* For updating tail value              *);
  143.  
  144.    Async_Buffer_Low       : INTEGER    (* Low point in receive buffer for XON  *);
  145.    Async_Buffer_High      : INTEGER    (* High point in receive buffer for XOFF*);
  146.    Async_Buffer_High_2    : INTEGER    (* Emergency point for XOFF             *);
  147.  
  148.    Async_XOFF_Sent        : BOOLEAN    (* If XOFF sent                      *);
  149.    Async_Sender_On        : BOOLEAN    (* If sender is enabled              *);
  150.    Async_Send_XOFF        : BOOLEAN    (* TRUE to send XOFF ASAP            *);
  151.    Async_XOFF_Received    : BOOLEAN    (* If XOFF received                  *);
  152.    Async_XOFF_Rec_Display : BOOLEAN    (* If XOFF received and displayed    *);
  153.    Async_XON_Rec_Display  : BOOLEAN    (* If XON received                   *);
  154.    Async_Baud_Rate        : WORD       (* Current baud rate                 *);
  155.  
  156.                                     (* Save previous serial interrupt status *)
  157.  
  158.    Async_Save_IAddr       : POINTER (* Interrupt procedure pointer          *);
  159.    Async_Save_LCR         : BYTE    (* Old LCR register contents            *);
  160.    Async_Save_MCR         : BYTE    (* Old MCR register contents            *);
  161.    Async_Save_IMR         : BYTE    (* Old interrupt enabled mask           *);
  162.    Async_Save_IER         : BYTE    (* Old interrupt enable register cont.  *);
  163.    Async_Save_DLR         : BYTE    (* Old divisor (low) contents           *);
  164.    Async_Save_DHR         : BYTE    (* Old divisor (high) contents          *);
  165.  
  166.    Async_Do_CTS           : BOOLEAN (* TRUE to do clear-to-send checking    *);
  167.    Async_Do_DSR           : BOOLEAN (* TRUE to do data-set-ready checking   *);
  168.    Async_Do_XonXoff       : BOOLEAN (* TRUE to do XON/XOFF flow checking    *);
  169.    Async_OV_XonXoff       : BOOLEAN (* TRUE to do XON/XOFF if buffer overfl *);
  170.    Async_Hard_Wired_On    : BOOLEAN (* TRUE if hard-wired connection        *);
  171.    Async_Break_Length     : INTEGER (* Length of break in 1/10 seconds      *);
  172.    Async_Line_Status      : BYTE    (* Line Status Reg at interrupt         *);
  173.    Async_Modem_Status     : BYTE    (* Modem Status Reg at interrupt        *);
  174.    Async_Line_Error_Flags : BYTE    (* Line status bits accumulated         *);
  175.    Async_Buffer_Size      : INTEGER (* Stores input buffer size             *);
  176.    Async_OBuffer_Size     : INTEGER (* Stores output buffer size            *);
  177.    Async_Uart_IER         : INTEGER (* Interrupt enable register address    *);
  178.    Async_Uart_MCR         : INTEGER (* Interrupt enable register address    *);
  179.    Async_Uart_IIR         : INTEGER (* Interrupt ID register address        *);
  180.    Async_Uart_MSR         : INTEGER (* Modem status register address        *);
  181.    Async_Uart_LSR         : INTEGER (* Line status register address         *);
  182.    Async_Uart_THR         : INTEGER (* Transmit hold register address       *);
  183.    Async_Uart_LCR         : INTEGER (* Line control register address        *);
  184.    Async_Uart_RBR         : INTEGER (* Read character register address      *);
  185.    Async_IMR              : INTEGER (* Interrupt mask register              *);
  186.    Async_Output_Delay     : INTEGER (* Delay in ms when output buffer full  *);
  187.    Async_OneMSDelay       : INTEGER (* Loop count value to effect 1 ms delay*);
  188.    Async_Buffer_Length    : INTEGER (* Receive buffer length                *);
  189.    Async_OBuffer_Length   : INTEGER (* Send buffer length                   *);
  190.                                     (* Pointer to Async_Send routine        *)
  191.    Async_Send_Addr        : Async_Ptr;
  192.    Async_Reject_Noise     : BOOLEAN (* TRUE to reject "bad" received chars  *);
  193.    Async_Noise_Char       : CHAR    (* Character to replace "noise"         *);
  194.